﻿//input, textarea의 포커스 배경색 - Updms\Common\BaseClass\PageBase.cs, PopupBase.cs확인
SetFocusColor.color = "#FFF6D0";	//#FFF6D0
function SetFocusColor(strId) {
   var objParent = $(strId);
   var arrInput = document.forms[strId].elements;
   for (var i=0; i<arrInput.length; i++) {
	  var objSrc = arrInput[i];
	  if (objSrc.type == 'text' || objSrc.type == 'password' || objSrc.type == 'textarea' || objSrc.type == 'file' ) {
		 objSrc.onfocus = function() {
			SetFocusColor.oldcolor = this.style.backgroundColor;
			this.style.backgroundColor = SetFocusColor.color;
			this.style.borderColor = "#808000";
		 }

		 objSrc.onblur = function() {
			this.style.backgroundColor = SetFocusColor.oldcolor;
			this.style.borderColor = "#D1D1D1";
		 }
	  }
   }
}

//그리드뷰의 체크박스 전체선택 및 해제 - Row구분하지 않음
function checkBoxCheckNoReverse() {
	var b = true;
	var tag = document.getElementsByTagName("input")

	if (tag != null) {
		//체크된 항목이 있는지 검사
		for (i = 0; i<tag.length; i++) {
			if (tag[i].type == "checkbox" && tag[i].id.indexOf("cb_check") > 0) {
				if (!tag[i].disabled) {	//비활성화되어있으면 처리안함
					b = !tag[i].checked;
				}
			}
		}
		//checked적용
		for (i = 0; i<tag.length; i++) {
			if (tag[i].type == "checkbox" && tag[i].id.indexOf("cb_check") > 0) {
				if (!tag[i].disabled) {	//비활성화되어있으면 처리안함
					tag[i].checked = b;
				}
			}
		}
	}
}


//그리드뷰의 체크박스 전체선택 및 해제
function checkBoxCheck(tableId) {
	var b = true;
	var tag = document.getElementsByTagName("input")

	if (tag != null) {
		//체크된 항목이 있는지 검사
		for (i = 0; i<tag.length; i++) {
			if (tag[i].type == "checkbox" && tag[i].id.indexOf("cb_check") > 0) {
				if (!tag[i].disabled) {	//비활성화되어있으면 처리안함
					b = !tag[i].checked;
				}
			}
		}
		//checked적용
		for (i = 0; i<tag.length; i++) {
			if (tag[i].type == "checkbox" && tag[i].id.indexOf("cb_check") > 0) {
				if (!tag[i].disabled) {
					tag[i].checked = b;
				}
			}
		}
	}

	//Row를 구분되도록
	if (document.getElementById(tableId) != null) {
		reverseRow(tableId, 0);
	}
}


//체크박스리스트의 전체선택 및 해제
//asp:CheckBoxList가 렌더링 된 테이블에 한해서 작동함.
function checkBoxListCheck( tableId ) {
	var b = true;
	var cb_cnt = getCheckBoxCntOnTable(tableId);

	//체크
	for (var i=0; i<cb_cnt; i++) {
		var cb = document.getElementById(tableId + "_" + i);
		b = !cb.checked;
	}

	//체크해제
	for (var i=0; i<cb_cnt; i++) {
		var cb = document.getElementById(tableId + "_" + i);
		cb.checked = b;
	}
}


//테이블내 체크박스의 전체선택 및 해제
function checkBoxCheckTable( tableId ) {
	var trCnt = getTrCount(tableId);
	var tdCnt = getTdCountTr(tableId);	
	var CheckBoxCnt = 0;
	var b = true;
	
	//체크선택
	for (var i=0; i<trCnt; i++ ) {
		for (var j=0; j<tdCnt; j++ ) {
			var tdObj = document.getElementsByTagName("table")[tableId].getElementsByTagName("tr")[i].getElementsByTagName("td")[j];
			if (tdObj.childNodes.length > 0) {
				if (tdObj.childNodes[0].type == "checkbox")	{
					b = !tdObj.childNodes[0].checked;
				}
			}
		}
	}

	//체크해제
	for (var i=0; i<trCnt; i++ ) {
		for (var j=0; j<tdCnt; j++ ) {
			var tdObj = document.getElementsByTagName("table")[tableId].getElementsByTagName("tr")[i].getElementsByTagName("td")[j];

			if (tdObj.childNodes.length > 0) {
				if (tdObj.childNodes[0].type == "checkbox")	{
					tdObj.childNodes[0].checked = b;
				}
			}
		}
	}
}


//그리드뷰의 체크박스 선택한 Row를 구분되도록(취소선)
function reverseRow( tbl_id, td_num ) {
	//테이블 id로 trObj검색
	var trObj = document.getElementsByTagName("table")[tbl_id].getElementsByTagName("tr");

	for (inx=1;inx<trObj.length;inx++) {
		//tr내 체크박스td의 체크박스 상태가 checked이면
		if (trObj[inx].getElementsByTagName("td")[td_num].childNodes[0].type == "checkbox" && trObj[inx].getElementsByTagName("td")[td_num].childNodes[0].checked ) {
			trObj[inx].style.textDecoration = "line-through";	//선택된 Row에 취소선긋기
		} else {
			trObj[inx].style.textDecoration = "none";
		}
	}
}


//그리드뷰의 체크박스 선택한 Row를 구분되도록(다른배경색)
function reverseBgRow( tbl_id, td_num ) {
	//테이블 id로 trObj검색
	var trObj = document.getElementsByTagName("table")[tbl_id].getElementsByTagName("tr");

	for (inx=1;inx<trObj.length;inx++) {
		//tr내 체크박스td의 체크박스 상태가 checked이면
		if (trObj[inx].getElementsByTagName("td")[td_num].childNodes[0].type == "checkbox" && trObj[inx].getElementsByTagName("td")[td_num].childNodes[0].checked ) {
			//td수만큼 돌면서 배경색을 넣는다
			for (i=0; i<trObj[inx].getElementsByTagName("td").length; i++ )
			{
				trObj[inx].getElementsByTagName("td")[i].style.backgroundColor = getMsg(MSG_STR_011);	//분홍색
			}
		} else {
			for (i=0; i<trObj[inx].getElementsByTagName("td").length; i++ )
			{
				trObj[inx].getElementsByTagName("td")[i].style.backgroundColor = getMsg(MSG_STR_004);	//흰색
			}
		}
	}
}

//메뉴-마우스 올리면
function overParentMenu(id) {
	document.getElementById(id).style.backgroundColor = getMsg(MSG_STR_003); //#F3F2D0
}

//메뉴-마우스 벗어나면
function outParentMenu(id) {
	if (event.srcElement.parentElement.className && event.srcElement.parentElement.className == "dui_current"){
		document.getElementById(id).style.backgroundColor = getMsg(MSG_STR_003); //#F3F2D0
	}else{
		document.getElementById(id).style.backgroundColor = getMsg(MSG_STR_012);	//#EEEEEE
	}
}

//그리드뷰 마우스오버
function overBackground(tbl_id, tr_num) {
	var tbl_num = getTagIndex("table", tbl_id);
	var trObj;

	//태그 인덱스값이 있으면
	if (tbl_num != -1) {
		trObj = document.getElementsByTagName("table")[tbl_num].getElementsByTagName("tr")[tr_num];
		trObj.style.backgroundColor = getMsg(MSG_STR_002);
	} else {
		alert("This page is no have TABLE tag ! !");
	}
}

//그리드뷰 마우스아웃 - 헤더가 한 Row만 있어야 함
function outBackground(tbl_id, td_num) {
	var trObj = document.getElementsByTagName("table")[tbl_id].getElementsByTagName("tr");	//테이블 id로 trObj검색

	//헤더는 제외하므로 inx는 1부터
	for (inx=1;inx<trObj.length;inx++) {
		//tr내 번호td의 값과 히든값(h_no)이 일치하면		
		if (trObj[inx].getElementsByTagName("td")[td_num].childNodes[0].nodeValue == document.getElementsByName("h_no")[0].value) {
			trObj[inx].style.backgroundColor = getMsg(MSG_STR_003);	//더 진하게
			trObj[inx].style.fontWeight = "bold";					//굵게
		} else {
			trObj[inx].style.backgroundColor = getMsg(MSG_STR_004);	//흰색
		}

		//체크박스가 체크되어있으면
		if (trObj[inx].getElementsByTagName("td")[0].childNodes[0].type == "checkbox" && trObj[inx].getElementsByTagName("td")[0].childNodes[0].checked ) {
			//td수만큼 돌면서 배경색을 넣는다
			//for (i=0; i<trObj[inx].getElementsByTagName("td").length; i++ )
			//{
			//	trObj[inx].getElementsByTagName("td")[i].style.backgroundColor = getMsg(MSG_STR_011);	//분홍색
			//}
			
			trObj[inx].style.textDecoration = "line-through";	//취소선
		} else {
			trObj[inx].style.textDecoration = "none";
		}
	}
}


//체크박스 클릭시 취소선 (gv_file_list, tr_idx, 2, 1)
function setCancelLine(tbl_id, tr_idx, td_idx, cb_node_idx) {
	var trObj = document.getElementsByTagName("table")[tbl_id].getElementsByTagName("tr");

	if (trObj[tr_idx].getElementsByTagName("td")[td_idx].childNodes[cb_node_idx].type == "checkbox" && 
		trObj[tr_idx].getElementsByTagName("td")[td_idx].childNodes[cb_node_idx].checked) {
		trObj[tr_idx].style.textDecoration = "line-through"; //선택된 Row에 취소선긋기
	} else {
		trObj[tr_idx].style.textDecoration = "none";
	}
}


//문자열에서 숫자만 추출하여 리턴
function extractNumber(s) {
	var r = "";
	for (var i=0; i<s.length; i++) {
		var c = s.charCodeAt(i);
		if ( 48 <= c && c <= 57) {
			var t = s.charAt(i);
			r += t;
		}
	}
	return r;
}

//문자열에서 숫자,소수점만 추출하여 리턴
function extractNumberDot(s) {
	var r = "";
	for (var i=0; i<s.length; i++) {
		var c = s.charCodeAt(i);
		if ( 48 <= c && c <= 57 || c == 46) {
			var t = s.charAt(i);
			r += t;
		}
	}
	return r;
}


// 정수만 검사
function isNumber(s) {
	for(var i=0; i < s.length; i++) {
		var c = s.charCodeAt(i);
		if( !((48 <= c && c <= 57)) ) {
			return false;
		}
	}
	return !isEmpty(s);
}


// 숫자 검사(마이너스 허용)
function isNumberMinus(s) {
	for(var i=0; i < s.length; i++) {
		var c = s.charCodeAt(i);
		if( !((48 <= c && c <= 57) || c==45) ) {
			return false;
		}
	}
	return !isEmpty(s);
}


// 숫자 검사(마이너스,점 허용)
function isNumberDot(s) {
	for(var i=0; i < s.length; i++) {
		var c = s.charCodeAt(i);
		if( !((48 <= c && c <= 57) || c==45 || c==46) ) {
			return false;
		}
	}
	return !isEmpty(s);
}


// 금액 검사(숫자검사 + 쉼표허용)
function isMoney(s) {
	for(var i=0; i < s.length; i++) {
		var c = s.charCodeAt(i);
		if( !((48 <= c && c <= 57) || c==44 || c==45) ) {
			return false;
		}
	}
	return !isEmpty(s);
}


//입력값에 스페이스 이외의 의미있는 값이 있는지 체크
function isEmpty(s) {
	return (s == null || s.replace(/ /gi,"") == "" ? true : false);
}


//주민등록번호 유효성 검사
function isIdenNo(s) {
	if (s == "" || s.indexOf("-") == -1) {
		return false;
	}

	numbers = s.split("-");
	a = numbers[0];
	b = numbers[1];

	if (a.match(/\D/) != null || b.match(/\D/) != null) {
		return false;
	}

	if (a.length != 6 || b.length != 7) {
		return false;
	}

	var SUMM, OSub, ModValue, LastVal;

	var A     = parseInt(a.charAt(0),10);
	var B     = parseInt(a.charAt(1),10);
	var C     = parseInt(a.charAt(2),10);
	var D     = parseInt(a.charAt(3),10);
	var E     = parseInt(a.charAt(4),10);
	var F     = parseInt(a.charAt(5),10);

	var G     = parseInt(b.charAt(0),10);
	var H     = parseInt(b.charAt(1),10);
	var I     = parseInt(b.charAt(2),10);
	var J     = parseInt(b.charAt(3),10);
	var K     = parseInt(b.charAt(4),10);
	var L     = parseInt(b.charAt(5),10);
	var OSub  = parseInt(b.charAt(6),10);

	SUMM = (A*2) + (B*3) + (C*4) + (D*5) + (E*6) + (F*7) + (G*8) + (H*9) + (I*2) + (J*3) + (K*4) + (L*5);
	ModValue = 11 - (SUMM % 11);
	LastVal =  ModValue % 10 ;

	if(OSub != LastVal) {
		return false;
	}

	return true;
}


//이메일 유효성 검사
function isEmail(s) {
	if (s.value == "" || s.match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9]+)+$") == null) {
		return false;
	}
	return true;
}

//URL 유효성 검사
function isUrl(s) {
	if (s == "" || s == "-") {
		return true;
	}

	if (s.match("(http|https|ftp|telnet|news):\/\/([a-z0-9_\-]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)") == null) {
		return false;
	}
	return true;
}


// 휴대폰번호 유효성 검사
function isCellPhone(s) {
	if (s == "" || s == "-") {
		return true;
	}

	if (s.match("^[0-9]{3,3}-[0-9]{3,4}-[0-9]{4,4}$") == null) {
		return false;
	}
	return true;
}


// 전화번호 유효성 검사
function isTelPhone(s) {
	if (s == "" || s == "-") {
		return true;
	}

	if (s.match("^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4,4}$") == null) {
		return false;
	}
	return true;
}


// 보안카드코드번호 유효성 검사 (01~ 40까지만 입력 가능)
function isSecuNum(s) {
	if (isNumber(s)) {
		//값을 10진수 정수로 바꾸어서 1~40사이가 아니면 false
		var iTemp = parseInt(s, 10)

		if (iTemp > 0 && iTemp < 41) {
			return true;
		}
	}
	return false;
}


//날짜차례검사(dt1이 dt2보다 이전이면 true)
function isDateSeq(a, b) {
	if (a > b) {
		return false;
	}
	return true;
}


//날짜형식체크
function isDate(s) {
    var y = "";
    var m = "";
    var d = "";
    var l = "";
    var len = s.length;

    if(len!=8 && len!=10)
    {
        return false;
    }
    if(len==10)
        s = s.substring(0, 4) + s.substring(5, 7) + s.substring(8, 10);

    y = s.substring(0, 4);
    m = s.substring(4, 6);
    d = s.substring(6, 8);

	if(y<1900) {
        return false;
    }
    if(m>12 || m<1) {
        return false;
    }
    l = getLastDay(y,m);

    if(d<1 || d>l) {
        return false;
    }
    return true;
}


//날짜형식체크 - 하이픈(-)
function isDateHyphen(s) {
	var regEx = /^\s*\d{4}[-]\d{2}[-]\d{2}\s*$/g;

	if (regEx.test(s)) {
		return isDate(s);
	} else {
		return false;
	}
}


//날짜형식체크 - 슬래쉬(/)
function isDateSlash(s) {
	var regEx = /^\s*\d{4}[/]\d{2}[/]\d{2}\s*$/g;

	if (regEx.test(s)) {
		return isDate(s);
	} else {
		return false;
	}
}


//날짜형식체크 - 년월
function isDateYM(s) {
	var regEx = /^\s*\d{4}[-]\d{2}\s*$/g;

	if (regEx.test(s)) {
		return isDate(s+"-01");
	} else {
		return false;
	}
}


//월의 마지막일을 구한다
function getLastDay(y, m) {
    var r;

    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
        r = 31;
	} else if(m == 4 || m == 6 || m == 9 || m == 11) {
        r = 30;
	} else {
        if((y % 400) == 0)
            r = 29;
        else if((y % 100) == 0)
            r = 28;
        else if((y % 4) == 0)
            r = 29;
        else
            r = 28;
    }
    return r;
}


//요일
function getDayOfWeek(dt) {
	var dow = new Array('일요일','월요일','화요일','수요일','목요일','금요일','토요일');
	var split_date = dt.split("-");
	return dow[new Date(split_date[0], split_date[1]-1, split_date[2]).getDay()];
}

//두 날짜간 차이일수 리턴
function getDayInterval(day1, day2) {
	var date1 = ToTimeObject(day1);
	var date2 = ToTimeObject(day2);
	var day   = 1000 * 3600 * 24; //24시간

	return parseInt((date2 - date1) / day, 10);
}

//두 날짜간 차이일수 허용여부 리턴
//chkDayInterval('2010-01-01', '2010-01-03', 2) -> true
//chkDayInterval('2010-01-01', '2010-01-03', 3) -> false
function chkDayInterval(day1, day2, gap) {
	var date1 = ToTimeObject(day1);
	var date2 = ToTimeObject(day2);
	var day   = 1000 * 3600 * 24; //24시간

	if (parseInt((date2 - date1) / day, 10) > gap) {
		return true;
	} else {
		return false;
	}
}

//날짜String을 Data형식으로 리턴
function ToTimeObject(dt) { //2010-11-11
	var year  = dt.substr(0,4);
	var month = dt.substr(5,2) - 1; // 1월=0,12월=11
	var day   = dt.substr(8,2);

	return new Date(year, month, day);
}

//두 년월의 차이개월수를 구한다. 2008-07-11 ~ 2008-09-11 -> 200807, 200809
function getDiffMonth(a, b) {
	var fy = a.replace(/-/g,"").substring(0,4)
	var fm = a.replace(/-/g,"").substring(4,6);
	var ty = b.replace(/-/g,"").substring(0,4);
	var tm = b.replace(/-/g,"").substring(4,6);

	var from = parseInt(fy) * 12 + parseInt(fm, 10);
	var to = parseInt(ty) * 12 + parseInt(tm, 10);

	return (to - from) + 1; // 3개월은 9 - 7 + 1이므로
}

//년월의 x개월수만큼의 년월 ('2009-01', -12) -> 2008-01
function getMonthEx(ym, addValue) {
	var y = ym.replace(/-/g,"").substring(0,4);
	var m = ym.replace(/-/g,"").substring(4,6);

	var dt = addMonth(y, m, "1", addValue);

	return dt;
}

//특정일의 ± x일 ('2009-01-01', -2) -> 2008-12-30
function getDayEx(ymd, addValue) {
	var y = ymd.replace(/-/g,"").substring(0,4);
	var m = ymd.replace(/-/g,"").substring(4,6);
	var d = ymd.replace(/-/g,"").substring(6,8);

	var dt = addDay(y, m, d, addValue);

	return dt;
}

//특정날짜에서 몇개월 전(후) 날짜(년월) 리턴
function addMonth(yyyy, mm, dd, pMonth) {
	var cDate; // 계산에 사용할 날짜 객체 선언
	var cYear, cMonth, cDay // 계산된 날짜값이 할당될 변수

	mm = mm*1 + ((pMonth*1)-1); // 월은 0~11 이므로 하나 빼준다

	cDate = new Date(yyyy, mm, dd) // 계산된 날짜 객체 생성 (객체에서 자동 계산)
	cYear = cDate.getFullYear(); // 계산된 년도 할당
	cMonth = cDate.getMonth(); // 계산된 월 할당
	cDay = cDate.getDate(); // 계산된 일자 할당

	dt = (dd == cDay) ? cDate : new Date(cYear, cMonth, 0); // 넘어간 월의 첫쨋날 에서 하루를 뺀 날짜 객체를 생성한다.

	//가공 (yyyy-MM)
	m = String(dt.getMonth()+1); if (m.length == 1){ m = "0" + m; }
	d = String(dt.getDate()); if (d.length == 1){ d = "0" + d; }

	var rslt = dt.getFullYear() +"-"+ m;

	return rslt;
}

//특정날짜에서 몇일 전(후) 날짜 리턴
function addDay(yyyy, mm, dd, addValue) {
	var dt = new Date(yyyy, mm, dd);
	var dttm = dt.getTime() + (addValue * 24 * 60 * 60 * 1000);
	dt.setTime(dttm);
	
	var y = dt.getFullYear();
	var m = String(dt.getMonth());
	var d = String(dt.getDate());
	
	if (m.length == 1){	m = "0" + m; }
	if (d.length == 1){	d = "0" + d; }
	
	return y + "-" + m + "-" + d;
}

//특정문자 치환 (aChar를 bChar로 치환)
function replaceChar(s, a, b) {
	var r = "";
	var len = s.length;

	for (var i=0; i<len; i++) {
		if (s.charAt(i) == a) {
			r += b;
		} else {
			r += s.charAt(i);
		}
	}
	return r;
}

//숫자에 3자리마다 쉼표(,)를 찍어준다. (숫자,마이너스,점 허용)
function addComma(s) {
	var r = '' + replaceChar(s,',','');
	var rtn = '';
	if (isNumberDot(r)) {
		if (r.length > 3) {
			var mod = r.length % 3;
			var output = (mod > 0 ? (r.substring(0,mod)) : '');

			for (i=0 ; i < Math.floor(r.length / 3); i++) {
				if ((mod == 0) && (i == 0)) {
					output += r.substring(mod+ 3 * i, mod + 3 * i + 3);
				} else {
					output+= ',' + r.substring(mod + 3 * i, mod + 3 * i + 3);
				}
			}
			rtn = output;
		} else {
			rtn = r;
		}
	} else {
		rtn = '';
	}
	return rtn.replace('-,', '-');
}


//문자열에서 콤마를 제외한 문자열을 리턴
function delComma(s) {
	return s.replace(/,/g, "");
}


//팝업으로 페이지 띄움(window.open)
function popupPage(url, w, h, st, re, sc) {
	var x = (screen.width / 2 - w / 2);
	var y = (((screen.height / 2) - 50) - h / 2);
	window.open(url,'','menubar=no,location=no,directories=no,status='+st+',toolbar=no,resizable='+re+',scrollbars='+sc+',width='+w+',height='+h+',left='+x+',top='+y);
}


//모달팝업으로 페이지 띄움
//x, y가 -1이면 화면 가운데
function modalPopupPage(url, wNm, x, y, w, h, etcParam, modelessYn) {
	var objNewWin;
	var vRetval;

	var x = (x == -1) ? (screen.width / 2 - w / 2) : x;
	var y = (y == -1) ? (((screen.height / 2) - 50) - h / 2) : y;
	var w = w;
	var h = h;

	try
	{
		if (etcParam == "fix") {
			etcParam = "center:yes; toolbar:no; location:no; directories:no; status:no; menubar:no; scroll:no; resizable:no; help:no; edge:raised; unadorned:no";
		}
		
		if (etcParam == "fix_scroll") {
			etcParam = "center:yes; toolbar:no; location:no; directories:no; status:no; menubar:no; scroll:yes; resizable:no;";
		}

		if (wNm == "newWindow") {
			wNm = new String(Math.round(Math.random() * 100000));
		}

		// x,y를 -1로 넘기면 화면 가운데로
		if (x == -1 && y == -1) {
			x = y = "";
		}

		
		//모달리스로 띄울지 여부
		if (window.showModelessDialog) {	//모달로 띄울수 있는 웹브라우저면
			if (modelessYn)	{
				vRetval = window.showModelessDialog(url, wNm, etcParam + "; dialogWidth:" + w + "px; dialogHeight:" + h + "px; dialogTop="+ y +"px; dialogLeft="+ x +"px;");
			} else {
				vRetval = window.showModalDialog(url, wNm, etcParam + "; dialogWidth:" + w + "px; dialogHeight:" + h + "px; dialogTop="+ y +"px; dialogLeft="+ x +"px;");
			}
		}else {
			vRetval = popupPage(url, w, h, 'no','no','no');
		}

		return vRetval;
	}
	catch(ex) {
		alert('Modal popup open error \n [ ' + ex.message + ' ]\n[ ' + ex.name + ' ]\n[ ' + ex.number + ' ]\n[ ' + ex.description + ' ]');
		return 'err';
	}
}


//페이지 이동
function moveThisPage(url) {
	window.location.href = url;
}


//페이지 이동 - 선택상자를 비활성화후 처리
function moveUrl(url) {
	url.disabled = true;
	location.href = url.value;
}


//부모페이지 이동 (모달창에서 콘트롤의 value에 URL이 있는경우)
//Modal, Modaless 구분
function moveParentObj(obj) {
	if (window.showModelessDialog) {
		var p = dialogArguments;
		p.location = obj.value;
	}else{
		opener.location = obj.value;
		window.close();
	}
}

//부모페이지 이동 (모달창에서 URL정보 사용, 모달의 경우 tp=modal로 일반팝업인 경우 tp=normal로 넘긴다)
function moveParentUrl(url, tp) {
	if (tp == "modal") {
		var p = dialogArguments;
		p.location = url;
	} else if (tp == "normal"){
		opener.location = url;
	}
}


//메뉴, 설명, 탑 - 숨김/보임
function toggleObj( p_obj ) {
	var obj = document.getElementById(p_obj);
	if (obj.style.display == 'none') {
		obj.style.display = 'block';
	} else if (obj.style.display == 'block') {
		obj.style.display = 'none';
	}
}


//메뉴 - 문자토글
function toggleStr(obj, showId, hideId) {
	if (obj.title == "Hide") {
		obj.title = "Show";
		document.getElementById(showId).style.display = 'block';
		document.getElementById(hideId).style.display = 'none';
	} else {
		obj.title = "Hide";
		document.getElementById(showId).style.display = 'none';
		document.getElementById(hideId).style.display = 'block';
	}
}

//메뉴 - 접기/펼친후 화면크기 재조정
function resetResize() {
	var tmp = window.location + "";
	if (tmp.indexOf("Crd2019r") != -1 || tmp.indexOf("Mny2021r") != -1 || tmp.indexOf("Ref2010r") != -1 || tmp.indexOf("Fit2010r.aspx") != -1) {
		setResize();
	}
}


//HTML내에서 특정태그의 특정아이디가 몇번째 있는지 리턴 ( 없으면 -1 )
//getTagIndex("TABLE", "GridView1")
function getTagIndex(tag_nm, tbl_id) {
	//특정 태그 검색
	var t = document.getElementsByTagName(tag_nm)
	var r = -1;

	if (t != null) {
		for (i = 0; i < t.length; i++) {
			if (t[i].id == tbl_id) {
				r = i;
			}
		}
	}
	return r;
}

//쿠키값 가져오기
function getCookie(key) {
	var cook = document.cookie + ";";
	var idx =  cook.indexOf(key, 0);
	var val = "";

 	if(idx != -1) {
    	cook = cook.substring(idx, cook.length);
    	begin = cook.indexOf("=", 0) + 1;
    	end = cook.indexOf(";", begin);
    	val = unescape( cook.substring(begin, end) );
	}

 	return val;
}

// 쿠키값 설정
function setCookie(name, value, expiredays) {
	var today = new Date();
	today.setDate( today.getDate() + expiredays );
	document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + today.toGMTString() + ";"
}


//메시지박스의 confirm창에서 Yes(예)를 클릭했는지 여부
function isMsgBoxYes() {
	if (msgBox.getValue() == "Yes" || msgBox.getValue() == "YES" || msgBox.getValue() == "Y" || msgBox.getValue() == "예") {
		return true;
	} else {
		return false;
	}
}


//페이지 닫기
function doClosePage() {
	if (isMsgBoxYes()) {
		window.close();
	}
}


//id에 포커스 주기
function setFocus( id ) {
	var obj = document.getElementById(id);
	obj.focus();
}

//테이블의 전체 TR갯수 구하기
function getTrCount( tableId ) {
	return document.getElementsByTagName("table")[tableId].getElementsByTagName("tr").length;
}

//테이블의 전체 TD갯수 구하기
function getTdCount( tableId ) {
	var tdCnt = 0;
	
	//테이블의 TR갯수를 구한다.
	var trCnt = document.getElementsByTagName("table")[tableId].getElementsByTagName("tr").length;

	for (var i=0; i<trCnt; i++ )
	{
		tdCnt += document.getElementsByTagName("table")[tableId].getElementsByTagName("tr")[i].getElementsByTagName("td").length;
	}
	return tdCnt;
}


//테이블의 한 TR내 TD갯수 구하기
function getTdCountTr( tableId ) {
	return document.getElementsByTagName("table")[tableId].getElementsByTagName("tr")[0].getElementsByTagName("td").length;
}


//테이블의 한 TR내 TH갯수 구하기
function getThCountTr( tableId ) {
	return document.getElementsByTagName("table")[tableId].getElementsByTagName("tr")[0].getElementsByTagName("th").length;
}
	

//CheckBoxList내 체크박스갯수
function getCheckBoxCntOnTable( tableId ) {
	var trCnt = getTrCount(tableId);
	var tdCnt = getTdCountTr(tableId);
	var cnt = 0;
	
	for (var i=0; i<trCnt; i++ ) {
		for (var j=0; j<tdCnt; j++ ) {
			var tdObj = document.getElementsByTagName("table")[tableId].getElementsByTagName("tr")[i].getElementsByTagName("td")[j];
			if (tdObj.childNodes.length > 0) {
				if (tdObj.childNodes[0].type == "checkbox")	{
					cnt++;
				}
			}
		}
	}
	return cnt;
}


//현재시간 리턴 (YYYY-MM-DD hh:mm:ss)
function getNowTime()
{
	var dt = new Date();
	m = String(dt.getMonth()+1); if (m.length == 1){ m = "0" + m; }
	d = String(dt.getDate()); if (d.length == 1){ d = "0" + d; }
	hh = String(dt.getHours()); if (hh.length == 1){ hh = "0" + hh; }
	mm = String(dt.getMinutes()); if (mm.length == 1){ mm = "0" + mm; }
	ss = String(dt.getSeconds()); if (ss.length == 1){ ss = "0" + ss; }
	
	var nowTime = dt.getFullYear() +"-"+ m +"-"+ d + " "+ hh +":"+ mm +":"+ ss;

	return nowTime;
}


//Class변경
function chgClassName( objId, classNm ) {
	var obj = document.getElementById(objId);
	obj.className = classNm;
}


//클립보드에 복사
function copyAsClipboard(value, isAlert) {
	window.clipboardData.setData('Text', value);
	if (isAlert) {
		msgBox.info(getMsg(MSG_INF_003)); //클립보드에 복사되었습니다
	}
}

//cs단에서 MsgBox호출
function callMsgBox( msg, para, tp ) {
	var param = para.split(",");

	switch (tp) {
		case "A":
			msgBox.alert(getMsg(msg, param));
			break;
		case "I":
			msgBox.info(getMsg(msg, param));
			break;
		case "S":
			window.status=(getMsg(msg, param));
			break;
		case "AB":
			msgBox.alert(getMsg(msg, param), historyBack);
			break;
		case "AC":
			msgBox.alert(getMsg(msg, param), closeWindow);
			break;
		case "IC":
			msgBox.info(getMsg(msg, param), closeWindow);
			break;
		case "ICR":
			msgBox.info(getMsg(msg, param), reloadParentClose);
			break;
		case "AX":
			msgBox.alert(getMsg(msg, param), goLogInPage);
			break;
		case "IMC": //ModalPopupExtender 닫기
			msgBox.info(getMsg(msg, param), hideAjaxModalPopup, false);
			break;
	    case "IMCR": //부모창리로드 후 ModalPopupExtender 닫기
	        msgBox.info(getMsg(msg, param), hideAjaxModalPopup, true);
	        break;
		case "AMC": //ModalPopupExtender 닫기
		    msgBox.alert(getMsg(msg, param), hideAjaxModalPopup, false);
			break;
		default:
			msgBox.alert(getMsg(msg, param));
			break;
	}
}

//cs단에서 MsgBox호출 - 예외정보처리
function callExceptionMsgBox( msg, tp ) {
	switch (tp) {
		case "A":
			msgBox.alert(msg);
			break;
		case "I":
			msgBox.info(msg);
			break;
		case "S":
			window.status=(msg);
			break;
		case "AB":
			msgBox.alert(msg, historyBack);
			break;
		case "AC":
			msgBox.alert(msg, closeWindow);
			break;
		case "IC":
			msgBox.info(msg, closeWindow);
			break;
		case "AX":
			msgBox.alert(msg, goLogInPage);
			break;
		default:
			msgBox.alert(msg);
			break;
	}
}

function historyBack() {
	history.go(-1);
}

//창닫기
function closeWindow() {
	window.close();
}

//부모창 리로드후 자기창닫기
function reloadParentClose() {
	opener.location = opener.location;
	window.close();
}

//부모창 이동후 자기창닫기
function hrefParentClose(obj) {
	opener.location = obj.value;
	window.close();
}

//로그인페이지로 이동 (MsgBoxController.aspx에서 호출)
function goLogInPage() {
	moveThisPage("http://localhost/updms/index.aspx");
}

//(부모창 리로드 후) ModalPopupExtender 닫기
//ModalPopupExtender를 사용하는 부모페이지는 모달창닫는 함수명을 hideModalPopupExtender라는 이름으로 구현해야함
function hideAjaxModalPopup(isParentReload) {
    if (isParentReload) {
        parent.location = parent.location;
    }
    parent.window.hideModalPopupExtender();
}

//사용자의 웹브라우저가 IE인지 여부(DOM해석방식이 다름)
function isIE(){
	if (navigator.appVersion.indexOf("MSIE ") > 0){
		return true;
	}
	return false;
}

//사용자의 IE버전이 9이상인지 체크
function chkOverIE9(){
	if (navigator.appName.indexOf("Internet Explorer") != -1){
		var isOver9 = (
			navigator.appVersion.indexOf("MSIE 9") > 0 ||
			navigator.appVersion.indexOf("MSIE 1") > 0
		);

		return isOver9;
	}
	return false;
}

//그리드뷰에 체크박스 체크여부
function isCheckedOnGridView(tableId, cboxIndex) {
	var trObj = document.getElementsByTagName("table")[tableId].getElementsByTagName("tr");
	var cbxIdx = isIE() ? chkOverIE9() ? 1 : 0 : 1;	//체크박스의 인덱스(IE8이하에서는 DOM해석방식이 다름)

	//헤더는 제외하므로 1부터
	for (var i = 1; i < trObj.length; i++) {
		//tr내 체크박스td의 체크박스가 하나라도 체크되어있으면 true
		var tdObj = trObj[i].getElementsByTagName("td")[cboxIndex];

		//Footer가 있으면 제외
		if (typeof (tdObj.childNodes[cbxIdx]) != "undefined") {
			if (tdObj.childNodes[cbxIdx].type == "checkbox" && tdObj.childNodes[cbxIdx].checked) {
				return true;
			}
		}
	}
	return false;
}

//정해진 문자열 입력시 다음 콘트롤로 포커스이동
function moveNextFocus( srcTarget, dstTarget, len) {
	var src = getByteLength(document.getElementById(srcTarget));
	
	if (src == len) {
		setFocus(dstTarget);
	}
}

//길이체크
function getByteLength( obj ) {
    var len = 0;
    var fbyte = obj.value;

    if ( fbyte == null ) {
		return 0;
	}
    
	for (var i=0; i<fbyte.length; i++) {
        var c = escape(fbyte.charAt(i));
        if ( c.length == 1 ) {
			len ++;
		}else if ( c.indexOf("%u") != -1 ) {
			 len += 2;
		}else if ( c.indexOf("%") != -1 ) { 
			 len += c.length/3;
		}
    }
    return len;
}

//첨부파일 확장자(이미지) 검사, 허용된 확장자면 true
function checkFileExtImage(filename) {
	if (filename.match(/\.(jpg|jpeg|gif|png|bmp)$/i)) return true;
}


//첨부파일 확장자(문서) 검사, 허용된 확장자면 true
function checkFileExtDoc(filename) {
	if (filename.match(/\.(ppt|doc|xls|pptx|docx|xlsx|hwp|pdf|txt)$/i)) return true;
}


/* tooltip관련 */
//var tooltip=function(){
//	var id = 'tt';
//	var top = 3;
//	var left = 3;
//	var maxw = 300;
//	var speed = 10;
//	var timer = 20;
//	var endalpha = 95;
//	var alpha = 0;
//	var tt,t,c,b,h;
//	var ie = document.all ? true : false;
//	return{
//		show:function(v,w){
//			if(tt == null){
//				tt = document.createElement('div');
//				tt.setAttribute('id',id);
//				t = document.createElement('div');
//				t.setAttribute('id',id + 'top');
//				c = document.createElement('div');
//				c.setAttribute('id',id + 'cont');
//				b = document.createElement('div');
//				b.setAttribute('id',id + 'bot');
//				tt.appendChild(t);
//				tt.appendChild(c);
//				tt.appendChild(b);
//				document.body.appendChild(tt);
//				tt.style.opacity = 0;
//				tt.style.filter = 'alpha(opacity=0)';
//				document.onmousemove = this.pos;
//			}
//			tt.style.display = 'block';
//			c.innerHTML = v;
//			tt.style.width = w ? w + 'px' : 'auto';
//			if(!w && ie){
//				t.style.display = 'none';
//				b.style.display = 'none';
//				tt.style.width = tt.offsetWidth;
//				t.style.display = 'block';
//				b.style.display = 'block';
//			}
//			if(tt.offsetWidth > maxw){tt.style.width = maxw + 'px'}
//			h = parseInt(tt.offsetHeight) + top;
//			clearInterval(tt.timer);
//			tt.timer = setInterval(function(){tooltip.fade(1)},timer);
//		},
//		pos:function(e){
//			var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
//			var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
//			tt.style.top = (u - h) + 'px';
//			tt.style.left = (l + left) + 'px';
//		},
//		fade:function(d){
//			var a = alpha;
//			if((a != endalpha && d == 1) || (a != 0 && d == -1)){
//				var i = speed;
//				if(endalpha - a < speed && d == 1){
//					i = endalpha - a;
//				}else if(alpha < speed && d == -1){
//					i = a;
//				}
//				alpha = a + (i * d);
//				tt.style.opacity = alpha * .01;
//				tt.style.filter = 'alpha(opacity=' + alpha + ')';
//			}else{
//				clearInterval(tt.timer);
//				if(d == -1){tt.style.display = 'none'}
//			}
//		},
//		hide:function(){
//			clearInterval(tt.timer);
//			tt.timer = setInterval(function(){tooltip.fade(-1)},timer);
//		}
//	};
//}();


//공통메시지에 정의된 메시지를 리턴한다. getMsg(MSG_COM_ERR_005, ["비밀번호","12"])
function getMsg(msgId, paramArray) {
	return new coMessage().getMsg(msgId, paramArray);
}


//메시지를 관리하는 객체. new coMessage().getMsg(msgId, paramArray);
function coMessage() {
	this.getMsg = coMessage_getMsg;
}


//메시지에서 '@'문자와 치환될 string 배열(Array의 index와 메시지 내의 '@'문자의 순서가 일치한다)
function coMessage_getMsg(message, paramArray) {
	if (isNull(message.trim())) {
		return null;
	}

	var index = 0;
	var re = /@/g;
	var count = 0;

	if (paramArray == null) {
		return message;
	}

	while ((index = message.indexOf("@", index)) != -1) {
		if (paramArray[count] == null) {
			paramArray[count] = "";
		}

		message = message.substr(0, index) + String(paramArray[count]) + message.substring(index + 1);
		index = index + String(paramArray[count++]).length;
	}
	return message;
}

//값이 null이거나 white space 문자로만 이루어진 경우 true를 리턴
function isNull(argValue) {
	if ( argValue == null || (typeof(argValue) == "string" && argValue.trim() == "") ) {
		return true;
	}
	return false;
}

//공백제거
String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s$)/g, "");
}

//특정개체의 x좌표값
function getPosX(o) {
	var obj = document.getElementById(o);
	var x = 0;
	while (obj != null) {
		x += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return x;
}

//특정개체의 y좌표값
function getPosY(o) {
	var obj = document.getElementById(o);
	var y = 0;
	while (obj != null) {
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return y;
}

//날짜에서 한자리수 날짜를 두자리수로 변환
//1 -> 01
function changeTwoDateType(a) {
	if (a < 10 ) {
		return "0" + a;
	}
	return a;
}

//컬럼 하이라이트 - 사용안함. 머지된경우 버그있음
//tableId : 테이블ID, tdIdx : TD의 인덱스, limitTrCnt : 적용하지않을 TR수(하단기준)
function setColumnHighlight(tableId, tdIdx){
	var trCnt = getTrCount(tableId);
	var tdCnt = getThCountTr(tableId);

	for (var i=1; i<trCnt; i++ ) {
		for (var j=0; j<tdCnt; j++ ) {
			if (j == tdIdx) {
				//TD에 배경색 지정
				var tdObj = document.getElementsByTagName("table")[tableId].getElementsByTagName("tr")[i].getElementsByTagName("td")[j];
				tdObj.style.backgroundColor = "#FFF6D0";
			}
		}
	}
}

//키값이 숫자인지 여부 ( 0 ~ 9 )
function chkKeyIsIntger(evt){
	if( 48 <= evt.keyCode && evt.keyCode <= 57){
		return true;
	}
	return false;
}

//URL에서 특정 파라미터의 값 리턴
//http://localhost/updms/Car/Car1011m.aspx?refuelling_dt=2011-02-05&amount=70,000&station=&page_mode=P
//사용법 :	var pu = new PageUrl(location.search);
//			var a = pu.getValue("page_mode"));
//          getKeyValuePairs : refuelling_dt=2011-02-05,amount=70,000,station=,page_mode=P
//          getParameters : refuelling_dt,amount,station,page_mode
//          getValue(page_mode) : P
//          getLength : 4
//          isParamExist : true

function PageUrl(q) {
	if (q.length > 1) {
		this.q = q.substring(1, q.length);
	} else {
		this.q = null;
	}
	
	this.keyValuePairs = new Array();
	
	if(q) {
		for(var i=0; i < this.q.split("&").length; i++) {
			this.keyValuePairs[i] = this.q.split("&")[i];
		}
	}		
	this.getKeyValuePairs = function() { return this.keyValuePairs; }
	this.getValue = function(s) {
		for(var j=0; j < this.keyValuePairs.length; j++) {
			if(this.keyValuePairs[j].split("=")[0] == s)
				return this.keyValuePairs[j].split("=")[1];
		}
		return -1;
	}
	this.getParameters = function() {
		var a = new Array(this.getLength());
		for(var j=0; j < this.keyValuePairs.length; j++) {
			a[j] = this.keyValuePairs[j].split("=")[0];
		}
		return a;
	}
	this.getLength = function() { return this.keyValuePairs.length; }
	this.isParamExist = function() { return this.keyValuePairs.length > 0; }
}

//테이블의 세로병합 - TableRowspan(tableId, '0');
function TableRowspan(oTable, checkColIndexs, startRowIdx, endRowIdx){
	var delObjs = Array();
	var startIndex = startRowIdx ? startRowIdx*1 : 0;
	var endIndex = endRowIdx ? endRowIdx : oTable.rows.length;

	for(var i = 0; i < checkColIndexs.length; i++){
		var checkColIndex = checkColIndexs[i]*1; //비교할 Cell Index
		var checkCell = null; //비교할 셀 오브젝트
		var CntRowSpan = 1; // 병합할 행의 수(기본값:1)
		for(var n=startIndex; n < endIndex; n++){
			var oCell = oTable.rows[n].cells[checkColIndex];
			
			if ( oCell != undefined) {
				var tValue = oCell.innerHTML; //현재 값 할당
				var checkValue = checkCell ? checkCell.innerHTML : null; //비교기준 값 할당(기본값 null)

				//비교기준 Cell의 값과 현재 Cell의 값을 비교
				if(checkValue != tValue){
					if(checkCell && cntRowSpan > 1){
						checkCell.rowSpan = cntRowSpan;	// 병합값 설정
					}
					checkCell = oCell; //비교기준 cell할당
					cntRowSpan = 1;    //병합값 초기화
				}
				else{
					delObjs[delObjs.length] = oCell; //삭제할 Object추가
					cntRowSpan++;	//병합값을 1증가 시킨다.
				}
			}
		}
		//마지막 병합값 설정은 for문에서 처리되지 않기때문에 한번더 실행한다.
		if(checkCell){
			checkCell.rowSpan = cntRowSpan;
		}
	}
	
	//오브젝트 삭제
	for(var i = 0; i < delObjs.length; i++){
		delObjs[i].parentNode.removeChild(delObjs[i]);
	}
}

//DIV 보여주기/숨기기. 마우스클릭한 위치(+10px)에서 보여줌
function showHiddenDiv(targetObj, evt) {
	var e = (!evt) ? window.event : evt;
	var obj = $(targetObj);
	obj.style.display = obj.style.display == "none" ? "block" : "none";

	var eventX = isIE() ? e.x : e.clientX;
	var eventY = isIE() ? e.y : e.clientY;

	var l = eventX ? eventX : document.documentElement.scrollLeft + eventX;
	var t = eventY ? eventY : document.documentElement.scrollTop + eventY;

	obj.style.left = (l + 10) + "px";
	obj.style.top = (t + 10) + "px";
}

//숫자,소수점만 허용
function regExpNumber(s) {
	if (isNumberDot(s)) {
		return s;
	}
	return "";
}

/**
 * @param	_fileName			swf 파일 경로
 * @param	_idName				id
 * @param	_width				swf 너비
 * @param	_height				swf 높이
 * @param	_wmode				Flash의 wmode 값 : window, transparent, opaque
 * @param	_flashvar			swf에 초기에 들어갈 데이터 - URL변수 형태의 스트링
 */

function showFlash(_fileName, _idName, _width, _height, _wmode, _flashvar, _base) {

	var data;

	if (_flashvar == null || _flashvar == '') {
		data = "isReal=true";
	} else {
		data = _flashvar + "&isReal=true";
	}

	var _object = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" width="' + _width + '" height="' + _height + '" id="' + _idName + '" align="middle">';
	_object += '<param name="allowScriptAccess" value="always" />';
	_object += '<param name="movie" value="' + _fileName + '" />';
	_object += '<param name="quality" value="high" />';
	_object += '<param name="wmode" value="' + _wmode + '" />';
	_object += '<param name="bgcolor" value="#FFFFFF" />';
	_object += '<param name="menu" value="false" />';
	_object += '<param name="flashvars" value=' + data + ' />';
	_object += '<param name="base" value=' + _base + ' />';
	_object += '<embed src="' + _fileName + '" wmode="' + _wmode + '" base="' + _base + '" flashvars=' + data + ' quality="high" menu="false" bgcolor="#FFFFFF" width="' + _width + '" height="' + _height + '" name="' + _idName + '" id="' + _idName + '" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
	_object += '</object>';

	document.write(_object);
}

/**
 * 플래시 Object를 찾아주는 함수(SWF ID)
 * param: movieName 플래시 Object의 ID
 * 
 */
function getFlashObject(movieName) {
	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	return (isIE) ? window[movieName] : document[movieName];
}